/*
 * Estacionamiento.h
 *
 *  Created on: 04/10/2012
 */

#ifndef ESTACIONAMIENTO_H_
#define ESTACIONAMIENTO_H_

#include <unistd.h>
#include <iostream>
#include <vector>
#include "MemoriaCompartida/MemoriaCompartida.h"
#include "Semaforos/Semaforo.h"
#include "Constantes.h"
#include "Ticket.h"
#include "Utils.h"
#include "Lugar.h"
#include "Log.h"

using namespace std;

class Estacionamiento {

private:

	MemoriaCompartida<int> cantidadAutos;
	MemoriaCompartida<int> montoFacturado;
	MemoriaCompartida<int> totalAutos;
	int cantidadLugares;
	int costoHora;
	vector<MemoriaCompartida<Lugar> > lugares;
	vector<Semaforo> semaforos;
	Semaforo semaforoCuentas;
	
	bool consultarLugar(int);

public:

	Estacionamiento(int, int);
	virtual ~Estacionamiento();
	void inicializar();
	void liberarRecursos();
	int getCantidadLugares();
	int buscarReservarLugarDisponible();
	int consultarCantidadAutos();
	int consultarMontoFacturado();
	int consultarTotalAutos();
	void liberarLugar(Ticket);
	void aumentarAutos();
	void disminuirAutos(int);
	void imprimirEstadisticas();
	
};

#endif /* ESTACIONAMIENTO_H_ */
